home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
HENSA
/
MISC
/
SHELL.ARC
/
Shell
/
Sources
/
c
/
BarIcon
< prev
next >
Wrap
Text File
|
1994-11-09
|
4KB
|
141 lines
#include "DeskLib:Icon.h"
#include "DeskLib:Event.h"
#include "DeskLib:Sound.h"
#include "DeskLib:WimpSWIs.h"
#include "DeskLib:Menu.h"
#include "DeskLib:Window.h"
#include "Shell.BarIcon.h"
#include "Shell.Shell.h"
#include "Shell.SafeAlloc.h"
#define menu_INFO 0
#define menu_PAUSE 1
#define menu_CONTINUE 2
#define menu_SPEED 3
#define menu_QUIT 4
static BOOL Shell_IconbarMenuHandler( event_pollblock *event, void *reference);
static BOOL Shell_IconbarMenuCancelHandler( event_pollblock *event, void *reference);
static void ClaimHandlers( void *reference)
{
Event_Claim( event_MENU, event_ANY, event_ANY, Shell_IconbarMenuHandler, reference);
Event_Claim( event_USERMESSAGE, event_ANY, event_ANY, Shell_IconbarMenuCancelHandler, reference);
}
static void ReleaseHandlers( void *reference)
{
Event_Release( event_MENU, event_ANY, event_ANY, Shell_IconbarMenuHandler, reference);
Event_Release( event_USERMESSAGE, event_ANY, event_ANY, Shell_IconbarMenuCancelHandler, reference);
}
#define Menu_FirstEntry(menu) ((menu_item *) (((menu_ptr) (menu) + 1)))
static BOOL Shell_IconbarMenuHandler( event_pollblock *event, void *reference)
{ menu_ptr m = (menu_ptr) reference;
mouse_block mouse;
Wimp_GetPointerInfo( &mouse);
if ( event->data.selection[0] == menu_INFO) ; /* Chosen 'Info'. */
if ( event->data.selection[0] == menu_PAUSE) {
Shell_paused = TRUE;
Menu_SetFlags( m, menu_PAUSE, TRUE, TRUE);
Menu_SetFlags( m, menu_CONTINUE, FALSE, FALSE);
}
if ( event->data.selection[0] == menu_CONTINUE) {
Shell_paused = FALSE;
Menu_SetFlags( m, menu_PAUSE, FALSE, FALSE);
Menu_SetFlags( m, menu_CONTINUE, TRUE, TRUE);
}
if ( event->data.selection[0] == menu_SPEED && event->data.selection[1]==0) {
double newspeed;
menu_block *submenu= Menu_FirstEntry(m)[ menu_SPEED].submenu.menu;
char *text = Menu_FirstEntry(submenu)[ 0].icondata.indirecttext.buffer;
sscanf( text, "%lf", &newspeed);
Shell_SetPollInterval( newspeed);
}
if ( event->data.selection[0] == menu_QUIT) Event_CloseDown();
if ( mouse.button.data.adjust) {
mouse.pos.x = mouse.pos.y = 0;
Menu_ShowLast(); /*( m, mouse.pos, |*iconbar*| FALSE);*/
}
else ReleaseHandlers( reference);
return TRUE;
}
static BOOL Shell_IconbarMenuCancelHandler( event_pollblock *event, void *reference)
{
if ( event->data.message.header.action == message_MENUSDELETED) ReleaseHandlers( reference);
return FALSE;
}
static BOOL Shell_IconbarMenuClickHandler( event_pollblock *event, void *reference)
{ menu_ptr m = (menu_ptr) reference;
if ( !event->data.mouse.button.data.menu) return FALSE; /* Not Menu button. */
Menu_Show( m, event->data.mouse.pos.x, -1);
ClaimHandlers( reference);
return TRUE;
}
icon_handle Shell_AddBarIcon( char *spritename)
{ icon_handle icon;
menu_ptr m;
window_handle infobox;
icon = Icon_BarIcon( spritename, iconbar_RIGHT);
m = Menu_New( "Shell", "Info|Pause,Continue|Speed|Quit");
infobox = Window_Create( "ProgInfo", 0);
if ( infobox) Menu_AddSubMenu( m, menu_INFO, (menu_ptr) infobox);
else Menu_SetFlags( m, menu_INFO, FALSE, TRUE);
/*
speedbox = Window_Create( "ShellSpeed", 0);
if ( speedbox) Menus_AddDialogBox( m, menu_SPEED+1, speedbox);
else Menus_FadeEntry( m, menu_SPEED+1, TRUE);
*/
{ menu_ptr subm;
subm = Menu_New( "Poll (s)", "0.1");
Menu_MakeWritable( subm, 0, Shell_SafeCalloc( 1, 8), 8, "");
Menu_AddSubMenu( m, menu_SPEED, subm);
}
Menu_SetFlags( m, menu_PAUSE, FALSE, FALSE);
Menu_SetFlags( m, menu_CONTINUE, TRUE, TRUE);
Event_Claim( event_CLICK, window_ICONBAR, icon, Shell_IconbarMenuClickHandler, (void *) m);
return icon;
}